#!/usr/bin/python
# -*- coding: utf-8 -*- 
import urllib,re
fast = False    # Режим быстрой загрузки (закачка только первой страницы списка прошедших игр) 

def getCountriesList():
    url = "http://en.cx/?lang=ru"
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.read()
    countryList = re.findall(r'Geography_CountryRepeater_ctl(\d+)_lblCountry\" class=.*?\">(.*?)</span>.*?cid=(\d+)', pageContent, re.MULTILINE | re.DOTALL)
    #print "Countries count: ",len(countryList),"\n"
    #print "\n".join(["%s - %s" % (countryName, countryId) for v, countryName, countryId in countryList] )
    return countryList

def getDomainsList(countryId, regionId):
    # /ALoader/Geography.aspx?mode=georeport&c=100030
    url = "http://en.cx/ALoader/Geography.aspx?lang=ru&mode=georeport&c=%s&r=%s" % (countryId,regionId)
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.readlines()
    domainList = []
    for line in pageContent:
        fields = line.split(";\t")
        if len(fields) == 9:
            fields[8] = fields[8].rstrip()
            del fields[6]
            del fields[0]
            domainList.append(fields)
    return domainList

def getRegions(countryId):
    url = "http://en.cx/ALoader/Geography.aspx?lang=ru&mode=georeport&c=%s" % countryId
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.readlines()
    regionsDomains = []
    mode = 'r'
    for line in pageContent:
        fields = line.split(";\t")
        fieldsCount = len(fields)
        if fieldsCount == 7:    # Если прилетел список регионов
            fields[6] = fields[6].rstrip()
            del fields[0]   # Удаляем первый элемент, равный букве 'r'
            regionsDomains.append(fields)
        elif fieldsCount == 9:    # Если прилетел список доменов
            fields[8] = fields[8].rstrip()
            del fields[6]
            del fields[0]
            regionsDomains.append(fields)
            mode = 'd'

    return (mode, regionsDomains)

def _getGamesList(pageContent):
    pattern = r'<span id=\"ctl\d+_lblPageName\"(.+)id=\"ctl\d+_tdRightPanel\"'
    gamesBlock = re.findall(pattern, pageContent, re.MULTILINE | re.DOTALL)
    if len(gamesBlock) == 0:
        return None
    # Распарсим блоки на небольшие кусочки - по одному на описание игры
    gamesPieces = re.findall(r'GameHeader_ImgGameType(.*?)gameInfo_lnkGameDetails', gamesBlock[0], re.MULTILINE | re.DOTALL)
    #print 'pieces:',len(gamesPieces)
    games = []
    for item in gamesPieces:
        #  Выделяем ИД и Название игры
        res = re.findall(r'<a href=\"\/GameDetails\.aspx\?gid=(\d+)\".*_gameInfo_GameHeader_lnkGameTitle.*?\">(.*?)<\/a>', item, re.MULTILINE | re.DOTALL)
        #print 'ID & NAME: ',res
        (gameID,gameName) = res[0]
        # Выделяем Номер, тип и вид игры
        res = re.findall(r'<span.*?gameInfo_GameHeader_lblGameNum\">(\d+)<\/span>', item, re.MULTILINE)
        gameNumber = res[0] # Порядковый номер игры в домене
        res = re.findall(r'ltrGameZoneVal.*?>(.+)<\/span>', item, re.MULTILINE)
        gameZone = res[0]
        res = re.findall(r'ltrGameTypeVal.*?>(.+)<\/span>', item, re.MULTILINE)
        gameType = res[0]
        res = re.findall(r'ltrGameStartDateTime.*?>(.+)<\/span>', item, re.MULTILINE)
        gameDate = res[0]
        games.append({'gameID':gameID, 'gameNumber':gameNumber, 'gameName':gameName, 'gameZone':gameZone, 'gameType':gameType,'gameDate':gameDate})
    return games

#Возвращает количество страниц с ссылками на игры
def getGames(domain):
    url = "http://%s/Games.aspx" % (domain,)
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.read()
    
    # Образец исходника страницы со списком страниц:
    # <div style="width:100%" align="center">1&nbsp;&nbsp;<a href="/Games.aspx?page=2">2</a>&nbsp;&nbsp;<a href="/Games.aspx?page=3">3</a>&nbsp;&nbsp;<a href="/Games.aspx?page=4">4</a>&nbsp;&nbsp;<a href="/Games.aspx?page=5">5</a>&nbsp;&nbsp;<a href="/Games.aspx?page=6">6</a><br/><br/></div>
    gameList = _getGamesList(pageContent)
    pageList = re.findall(r'<a href=\"\/Games\.aspx\?page=(\d+)\">', pageContent, re.MULTILINE | re.DOTALL)
    
    if fast ==False and len(pageList) > 0:      # Если страниц более одной, и БыстрыйРежим выключен
        #pageList[:0] = [1];
        pageList = [int(pn) for pn in pageList] # Преобразуем строковые значения номеров страниц в числовые (для поиска максимума)
        maxPageNumber = max(pageList)
        
        for i in xrange(2,maxPageNumber+1):
            url = "http://%s/Games.aspx?page=%d" % (domain,i)
            pageContent = urllib.urlopen(url).read()
            gameList = gameList + _getGamesList(pageContent) 
    
    return gameList

def getScenarioSource(domain, gameId):
    url = "http://%s/GameScenario.aspx?gid=%s" % (domain,gameId)
    pageRequest = urllib.urlopen(url)
    pageContent = pageRequest.read()
    return pageContent